package br.com.trophy.parsing;

import java.util.Vector;

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

public class TrophyHandler extends DefaultHandler
{
	// ==========================================================================
	// Atributos de classe
	// ==========================================================================

	private enum TAGS
	{
		trophys, trophy, name, desc, type, date
	}

	private StringBuffer tempString;

	private Trophy tempTrophy;
	private Vector<Trophy> trophies;
	private boolean isTrophy;
	private boolean isName;
	private boolean isDesc;
	private boolean isType;
	private boolean isDate;

	// ==========================================================================
	// Construtor
	// ==========================================================================
	public TrophyHandler()
	{
		super();
		this.trophies = new Vector<Trophy>();
		this.tempString = new StringBuffer();
	}
	// ==========================================================================
	// Metodos Publicos
	// ==========================================================================
	public Vector<Trophy> getParsedTrophies()
	{
		return trophies;
	}
	// ==========================================================================
	@Override
	public void startDocument()
	{
	}
	// ==========================================================================
	@Override
	public void endDocument()
	{
	}
	// ==========================================================================
	@Override
	public void characters( char ch[], int start, int length )
	{
		if ( isTrophy || isName || isDesc || isType || isDate )
		{
			tempString.append( ch, start, length );
		}
	}
	// ==========================================================================
	@Override
	public void startElement( String n, String l, String q, Attributes a )
	{
		switch ( TAGS.valueOf( l ) )
		{
		case trophy:
			tempTrophy = new Trophy();
			break;
		case name:
			isName = true;
			tempString.setLength( 0 );
			break;
		case desc:
			isDesc = true;
			tempString.setLength( 0 );
			break;
		case type:
			isType = true;
			tempString.setLength( 0 );
			break;
		case date:
			isDate = true;
			tempString.setLength( 0 );
			break;
		default:
			tempString.setLength( 0 );
			break;
		}
	}
	// ==========================================================================
	@Override
	public void endElement( String n, String l, String q )
	{
		switch ( TAGS.valueOf( l ) )
		{
		case name:
			if ( tempString.toString() != "" )
			{
				isName = false;
				tempTrophy.setName( tempString.toString() );
				break;
			} else
				break;
		case desc:
			isDesc = true;
			tempTrophy.setDesc( tempString.toString() );
			break;
		case type:
			isType = true;
			tempTrophy.setType( tempString.toString() );
			break;
		case date:
			isDate = true;
			tempTrophy.setDate( tempString.toString() );
			break;
		case trophy:
			trophies.add( tempTrophy );
			break;
		default:
			break;
		}
	}
}
